package com.pic.mgt.jdbc;

import java.sql.SQLException;

import org.springframework.dao.DataAccessException;

/**
 * 當必須大量執行某 Sql Statement時，可利用此類別。本類別為根據所提供的 Sql Statement，將
 * Sql Statement 在每次執行後都會保留片段时間，不會立刻關閉，等下次再執行此 Sql Statement
 * 時，能夠直接使用，增加大量執行時的效率。
 * @author p10118178
 *
 */
public interface CachedPreparedStatemntJdbcOperations {
	/**
	 * 新增一個 PreparedStatement 敍述 資訊
	 * @param preparedStatementScript 
	 * @param timeout 表示此 PreparedStatemt多久沒使用後會被自動回收(單位:毫秒)
	 * @return false，表示新增失敗，可能原因為已有重覆的 Sql Statement ID 或給定的參數為 null。
	 */
	public boolean addPreparedStatementScript(String preparedStatementScript,
									   		  long timeout);
	
	public void removePreparedStatementScript(String preparedStatementScript);
	
	/**
	 * 執行 PreparedStatement (此 PreparedStatement 執行前必須要新增)。
	 * @param preparedStatementScript
	 * @param parameterValueArray 參數資訊。參數分別對應至陣列的順序。
	 * @return
	 * @throws SQLException
	 */
	public int executeUpdate(String preparedStatementScript,
							 Object[] parameterValueArray) throws DataAccessException;
}
